!-------------------------------------------------------------LICENSE--------------------------------------------------------------!
!                                                                                                                                  !
!The MAP code is written in Fortran language for magnetohydrodynamics (MHD) calculation with the adaptive mesh refinement (AMR)    !
!and Message Passing Interface (MPI) parallelization.                                                                              !
!                                                                                                                                  !
!Copyright (C) 2012                                                                                                                !
!Ronglin Jiang                                                                                                                     !
!rljiang@ssc.net.cn                                                                                                                !
!585 Guoshoujing Road. Pudong, Shanghai, P.R.C. 201203                                                                             !
!                                                                                                                                  !
!This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License         !
!as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.             !
!                                                                                                                                  !
!This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of    !
!MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.                        !
!                                                                                                                                  !
!You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software     !
!Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.                                                   !
!                                                                                                                                  !
!-------------------------------------------------------------LICENSE--------------------------------------------------------------!

!==================================================================================================================================|
subroutine block_boundary_potential (current)
!==================================================================================================================================|

   use parameters
   use block_define
   implicit none

   type(block), pointer, intent(inout) :: current

   integer(4) :: i_neigh, j_neigh
   type(block), pointer :: neigh

!----------------------------------------------------------------------------------------------------------------------------------|

   if (any (bnd_exterior(:, :, 1) .eq. 0)) then
!----------------------------------------------------------------------------------------------------------------------------------|
!     left boundary
!----------------------------------------------------------------------------------------------------------------------------------|
      i_neigh = -1
      j_neigh = 0
      neigh => current%neigh(i_neigh, j_neigh)%pblock
      if (current%id(1, 1) .eq. 1 .and. neigh%id(1, 1) .eq. ini_block_x) then
         call bnd_pote_2d (current%az, current%bx, current%by, current%x, current%y, nx_block, ny_block, ng, 'x', 'l')
      endif

!----------------------------------------------------------------------------------------------------------------------------------|
!     right boundary
!----------------------------------------------------------------------------------------------------------------------------------|
      i_neigh = 1
      j_neigh = 0
      neigh => current%neigh(i_neigh, j_neigh)%pblock
      if (current%id(1, 1) .eq. ini_block_x .and. neigh%id(1, 1) .eq. 1) then
         call bnd_pote_2d (current%az, current%bx, current%by, current%x, current%y, nx_block, ny_block, ng, 'x', 'h')
      endif
   endif

   if (any (bnd_exterior(:, :, 2) .eq. 0)) then
!----------------------------------------------------------------------------------------------------------------------------------|
!     bottom boundary
!----------------------------------------------------------------------------------------------------------------------------------|
      i_neigh = 0
      j_neigh = -1
      neigh => current%neigh(i_neigh, j_neigh)%pblock
      if (current%id(2, 1) .eq. 1 .and. neigh%id(2, 1) .eq. ini_block_y) then
         call bnd_pote_2d (current%az, current%bx, current%by, current%x, current%y, nx_block, ny_block, ng, 'y', 'l')
      endif

!----------------------------------------------------------------------------------------------------------------------------------|
!     top boundary
!----------------------------------------------------------------------------------------------------------------------------------|
      i_neigh = 0
      j_neigh = 1
      neigh => current%neigh(i_neigh, j_neigh)%pblock
      if (current%id(2, 1) .eq. ini_block_y .and. neigh%id(2, 1) .eq. 1) then
         call bnd_pote_2d (current%az, current%bx, current%by, current%x, current%y, nx_block, ny_block, ng, 'y', 'h')
      endif
   endif

!----------------------------------------------------------------------------------------------------------------------------------|
   return
end subroutine block_boundary_potential
